package com.wuchao.mapreduce.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;


/**
 * @author 吴超
 * @time 2021/10/6 17:09
 * KEYIN, map阶段，输入的key的类型：LongWritable
 * VALUEIN, map阶段，输入value的类型：Text
 * KEYOUT, map阶段，输出key的类型：Text
 * VALUEOUT, map阶段，输出value的类型：IntWritable
 */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private Text outK = new Text();
    private IntWritable outV = new IntWritable(1);


    /**
     *  @author 吴超
     *  @time 2021/10/6 17:24
     *  key : 就是位置标记符号
     *  value ： 就是一行数据
     *  context ： 就是上下文，需要的所有配置，以及数据传输，都在里面
     *  map方法是一行数据就在run方法里循环一次，所以这里只用针对一行数据去写代码进行处理即可
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        // 1.获取一行数据，转换为字符串
        String line = value.toString();
        // 2.按照空格切分数据
        String[] words = line.split(" ");
        // 3.遍历words数组
        for (String word : words) {
            // 封装outK,outV
            outK.set(word);
            // 写出
            context.write(outK, outV);
        }
    }
}
